import java.io.Serializable;
import java.util.Collection;
import java.util.GregorianCalendar;
import java.util.HashMap;
import java.util.HashSet;
import java.util.Observable;


public class Parution extends Observable implements Serializable {

	// ************************************************************************************************************
	// Constantes
	// ************************************************************************************************************

	private static final long serialVersionUID = 1L;
	
	// ************************************************************************************************************
	// Attributs
	// ************************************************************************************************************

	private String _numPar;
	
	// Attributs d'Association
	
	private Periodique _periodique;
	private HashMap<String, Article> _articles;
	
	
	// ************************************************************************************************************
	// Constructeur
	// ************************************************************************************************************
	/**
	 * Constructeur. Crée une parution .
	 * 
	 * @param periodique	Objet periodique auquel associer la parution
	 * @param numParution	Numero de la parution
	 */
	public Parution(Periodique periodique, String numParution) {
		this.setPeriodique(periodique);
		this.setNumParution(numParution);
		this.setArticles(new HashMap<String, Article>());
		
	} // Fin Constructeur
	
	// Affecteurs
	
		/**
		 * setter de l'attribut periodique
		 * @param periodique valeur à affecter au periodique de la parution
		 */
		public void setPeriodique(Periodique periodique){
			_periodique = periodique;
		}
		
		/**
		 * setter de l'attribut exemplaires
		 * @param exemplaires valeur à affecter à la date d'édition de l'ouvrage
		 */
		public void setNumParution(String numParution){
			_numPar = numParution;
		}
		/**
		 * setter de l'attribut articles (ensemble des articles de la parution)
		 * @param exemplaires hashmap d'articles
		 */
		public void setArticles(HashMap<String, Article> articles) {
			_articles = articles;
		}
		
		// ------------------------------------------------------------------------------------------------------------
		// Accesseurs
		
		/**Integer
		 * Getter du numero de parution.
		 * @return le numero de la parution
		 */
		public String getNumPar() {
			return _numPar;
		}

		/**
		 * Getter du periodique
		 * @return periodique de la parution
		 */
		public Periodique getPeriodique() {
			return _periodique;
		}

		/**
		 * getter d'un article de la parution.
		 * @param titre de l'article 
		 * @return l'article dont le titre à été passé en parametre si il existe
		 */
		public Article getArticle(String titre) {
			return (Article) _articles.get(titre);
		} 

		/**
		 * getter de l'ensemble des articles.
		 * @return une collection d'articles
		 */
		public Collection<Article> getArticles() {
			return _articles.values();
		}

		/**
		 * getter du nombre d'article de la parution.
		 * @return un entier représentant le nombre d'articles
		 */
		public int getNbArticles() {
			return _articles.size();
		}
		
		/**
		 * Ajoute un article à la parution
		 * @param article l'article à ajouter
		 */
		public void addArticle(Article article) {
			_articles.put(article.getTitre(), article);
			this.notifierObservateurs();
		}
		public void notifierObservateurs() {
			this.setChanged();
			this.notifyObservers();	
		}
} // Fin Classe Parution
